import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import app from './modules/app'
import settings from './modules/settings'
import user from './modules/user'

Vue.use(Vuex)

// 定义一个模块
const test = {
  // 命名空间,指定模块名来调用方法,组件内调用时写法: 模块名/方法名
  namespaced: true,
  state: {
    token: null
  },
  mutations: {
    setToken(state, token) {
      state.token = token
      console.log('tets模块的setToken')
    }
  }
}

const store = new Vuex.Store({
  modules: {
    app,
    settings,
    user,
    test // 注册vuex的模块
  },
  // 定义计算属性
  getters: {
    // showCount(state) {
    //   return state.count++
    // }
    showCount: state => 'count=' + state.count,
    ...getters
  },
  // 定义数据
  state: {
    count: 0,
    age: 20
  },
  // 定义同步方法
  mutations: {
    add(state) {
      // 需要通过state参数修改数据
      state.count++
    },
    // 传参, 定义接收参数的写法
    addN(state, num) {
      state.count += num
    },
    setToken(state) {
      console.log('根模块的setToken')
    }
  },
  actions: {
    // context 等同于$store
    addSync(context) {
      setTimeout(() => {
        // 需要调用mutations, 然后修改数据
        context.commit('add')
      }, 500)
    },
    addSyncN(context, num) {
      setTimeout(() => {
        // 需要调用mutations, 然后修改数据
        context.commit('addN', num)
      }, 500)
    }
  }
})

export default store
